package cn.tedu.peipei.base.handler;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Api(tags = "上传文件")
@Slf4j
@RestController
@RequestMapping("v1/file")
public class UploadController {
    /**
     * 定义方法处理图片上传功能
     */
    @ApiOperation("上传文件")
    @ApiImplicitParam(name = "file",value = "文件",required = true)
    @PostMapping("upload")
    //MultipartFile用来接受上传图片文件的对象
    //注意：形参file必须与前端upload上传组件的name一致!
    public JsonResult upload(MultipartFile file)throws IOException{
        //1得到原始文件名
        String fileName= file.getOriginalFilename();
        //2获取图片后缀名
        String suffix=fileName.substring(fileName.lastIndexOf("."));
        //3生成一个唯一不重复的随机字符串作为新的文件名
        fileName= UUID.randomUUID()+suffix;
        //4指定一个路径用来储存上传的图片文件，注意：这个路径必须自己电脑上有
        String dirPath="E:/files";
        //5为了提高检索性能，我们可以设置一个自定义的日期路径作为图片存储的文件夹
        //一般以年月日的格式储存，比如2020/01/01
        SimpleDateFormat sdf =new SimpleDateFormat("/yyyy/MM/dd/");
        //6将当前的实际日期转为上面的日期格式
        String datePath =sdf.format(new Date());
        //7将上面的盘符路径与日期路径拼接成一个完整存储文件夹路径
        File dirFile=new File(dirPath+datePath);
        //8如果文件夹不存在，则依据此路径创建多次文件夹
        if(!dirFile.exists()){
            dirFile.mkdirs();
        }
        //9拼接一个完整的图片路径
        String filePath=dirPath+datePath+fileName;
        //10将图片保存在指定的文件夹中
        file.transferTo(new File(filePath));
        //11把日期路径+图片名 相应给前端，前端拿到这个数据后再回显图片
        return JsonResult.ok(datePath+fileName);
    }
    @ApiOperation("删除文件")
    @ApiImplicitParam(name="imgUrl",value = "图片路径",required = true)
    @PostMapping("remove")
    public JsonResult remove(String imgUrl){
        log.debug("图片删除：imgUrl={}",imgUrl);
        //拼接完整的路径，创建对应的java对象删除磁盘上对应的文件
        new File("e:/files"+imgUrl).delete();
        return JsonResult.ok();
    }
}
